// 客户端
const prisma = require('./prisma')

// 从结果集中筛选,不包括哪些字段
const omitFields = {
  update_at: true,
  delete_at: true,
}

class UasPatrolModel {
  async create(patrol) {
    return await prisma.uasPatrol.create({
      data: {
        platform: patrol.platform,
        program_version: patrol.programVersion,
        source: patrol.source,
        signature: patrol.signature,
        uas_id: patrol.uas_id,
        time_stamp: patrol.time_stamp,
        uas_model: patrol.uas_model,
        coordinate: patrol.coordinate,
        longitude: patrol.longitude, // 单位度
        latitude: patrol.latitude, // 单位度
        height_type: patrol.height_type ? patrol.height_type : null,
        height: patrol.height ? patrol.height : null,
        altitude: patrol.altitude ? patrol.altitude : null,
        vs: patrol.vs ? patrol.vs : null,
        gs: patrol.gs ? patrol.gs : null,
        course: patrol.course ? patrol.course : null,
        // 坐标(地理坐标)
        lat: patrol.lat ? patrol.lat : null,
        lng: patrol.lng ? patrol.lng : null,
      },
      omit: omitFields,
    })
  }

  // 批量处理
  async batchCreate(batchData) {
    const result = await prisma.uasPatrol.createMany({
      skipDuplicates: true,
      data: batchData,
    })
    return result
  }
  //
  async get(id, where = null) {
    // select 与 include 不能同时使用
    const result = await prisma.uasPatrol.findFirst({
      where: Object.assign({ id: id }, where),
      // 从结果集中过滤，不包括某些字段
      omit: omitFields, // 不能与select同时使用
    })
    return result
  }
  // 列表 这里官方建议使用游标
  async list(pageNo, pageSize, where = null) {
    //
    const skip = (pageNo - 1) * pageSize
    return await prisma.uasPatrol.findMany({
      omit: omitFields,
      skip: skip,
      take: pageSize,
      orderBy: {
        id: 'desc',
      },
      where: Object.assign({}, where),
    })
  }

  // 未删除的数据
  async count(where = null) {
    return await prisma.uasPatrol.count({
      where: Object.assign({}, where),
    })
  }

  // 更新
  async update(id, proj, where = null) {
    return await prisma.uasPatrol.update({
      omit: omitFields,
      where: Object.assign({ id: id }, where),
      data: proj,
    })
  }

  // 删除
  async del(id, where = null) {
    return await prisma.uasPatrol.update({
      data: {
        deleted_at: new Date(), // 逻辑删除
      },
      omit: omitFields,
      where: Object.assign({ id: id }, where),
    })
  }
}

module.exports = new UasPatrolModel()
